<?php

namespace app\admin\controller;

use think\Db;
use think\Validate;

// 学生
class Student extends Auth
{
    // 载入页面
    public function student()
    {
        // 返回视图页面
        return view("/page/student");
    }

    // 获取学科列表
    public function getList()
    {
        try {
            // 获取请求信息
            $request = $this->request;
            // 是否传入学号
            if ($request->has('studentNo', 'get') && $request->get('studentNo') != '') {
                // 根据标题条件查询
                $info['where']['v1_student.student_no'] = ['=', $request->get('studentNo')];
            }
            // 是否传入ID
            if ($request->has('studentId', 'get') && $request->get('studentId') != '') {
                // 根据状态条件查询
                $info['where']['v1_student.student_id'] = ['=', $request->get('studentId')];
            }
            // 是否传入学生姓名
            if ($request->has('studentName', 'get') && $request->get('studentName') != '') {
                // 根据项目ID条件查询
                $info['where']['v1_student.student_name'] = ['=', $request->get('studentName')];
            }
            // 只查非管理员部分
            $info['where']['v1_student.student_power'] = [2, 3];
            // 操作表
            $info['table'] = 'v1_student';
            // 别名处理
            $field  = '
            v1_student.*';
            // 设置别名
            $info['field'] = $field;
            // 是否不分页获取全部数据
            if (!$request->has('list', 'get') && $request->get('list') != 'all') {
                // 分页
                $info['limit'] = $this->getPageing();
            }
            // 排序
            $info['order'] = "v1_student.student_id desc";
            // 查询数据
            return $this->queryList($info);
        } catch (\Exception $e) {
            // 返回空数据
            return json($this->initEmptyData());
        }
    }

    // 添加同学
    public function addInfo()
    {
        try {
            // 验证是否管理员
            if (session(USERPOWER) > 2) {
                return json($this->initTips(300, "权限不足"));
            }
            // 获取请求信息
            $request = $this->request;
            // 信息验证
            $validate = new Validate([
                'studentName' => 'require',
                'studentNo' => 'require',
            ], [
                'studentName.require' => '学生姓名不能为空',
                'studentNo.require' => '学号不能为空',
            ]);
            // 判断验证是否通过
            if (!$validate->check($request->post())) {
                // 表单验证失败
                return json($this->initTips(100, $validate->getError()));
            } else {
                Db::startTrans(); //开启事务s
                try {
                    // 添加数据处理
                    $data = [
                        "student_no" => $request->post('studentNo'),
                        "student_name" => $request->post('studentName'),
                        "student_passwd" => md5($request->post('studentNo')),
                        "student_token" => $request->post('studentNo')
                    ];
                    // 添加数据
                    $res = Db::table('v1_student')->insertGetId($data);
                    // 判断数据是否添加成功
                    if ($res >= 0) {
                        // 事务提交
                        Db::commit();
                        // 返回信息
                        return json($this->initTips(200, '添加成功'));
                    } else {
                        // 事务回滚
                        Db::rollback();
                        // 返回信息
                        return json($this->initTips(400));
                    }
                } catch (\Exception $ee) {
                    // 返回异常信息
                    return json($this->initTips(500));
                }
            }
        } catch (\Exception $e) {
            // 处理异常抛出
            return json($this->initTips());
        }
    }

    // 删除同学
    public function delInfoAll()
    {
        try {
            // 验证是否管理员
            if (session(USERPOWER) > 1) {
                return json($this->initTips(300, "权限不足"));
            }
            // 获取请求信息
            $request = $this->request;
            // 信息验证
            $validate = new Validate([
                'ids' => 'require'
            ], [
                'ids.require' => '删除ID不能为空'
            ]);
            // 判断验证是否通过
            if (!$validate->check($request->post())) {
                // 表单验证失败
                return json($this->initTips(100, $validate->getError()));
            } else {
                Db::startTrans(); //开启事务
                try {
                    // 如果不是数组转为数组
                    if (!is_array($request->post('ids'))) {
                        $_data = explode(",", $request->post('ids'));
                    } else {
                        $_data = $request->post('ids');
                    }

                    // 验证是否自己删除自己
                    if (in_array(session(USERINFO)['student_id'], $_data)) {
                        return json($this->initTips(400, "不能删除当前登录账号"));
                    }

                    // 删除数据
                    $res = Db::table('v1_student')->where('student_id', 'in', $_data)->delete();
                    // 判断数据是否添加成功
                    if ($res >= 0) {
                        // 事务提交
                        Db::commit();
                        // 返回信息
                        return json($this->initTips(200, '删除成功'));
                    } else {
                        // 事务回滚
                        Db::rollback();
                        // 返回信息
                        return json($this->initTips(400));
                    }
                } catch (\Exception $ee) {
                    // 事务回滚
                    Db::rollback();
                    // 返回异常信息
                    return json($this->initTips(500));
                }
            }
        } catch (\Exception $e) {
            // 处理异常抛出
            return json($this->initTips());
        }
    }

    // 编辑同学
    public function editInfo()
    {
        try {
            // 验证是否管理员
            if (session(USERPOWER) > 2) {
                return json($this->initTips(300, "权限不足"));
            }
            // 获取请求信息
            $request = $this->request;
            // 信息验证
            $validate = new Validate([
                'id' => 'require',
                'studentNo' => 'require',
                'studentName' => 'require',
            ], [
                'id.require' => 'ID不能为空',
                'studentNo.require' => '学号不能为空',
                'studentName.require' => '学生姓名不能为空',
            ]);
            // 判断验证是否通过
            if (!$validate->check($request->post())) {
                // 表单验证失败
                return json($this->initTips(100, $validate->getError()));
            } else {
                Db::startTrans(); //开启事务
                try {
                    // 修改数据处理
                    $data = [
                        "student_no" => $request->post('studentNo'),
                        "student_name" => $request->post('studentName'),
                    ];
                    // 修改数据
                    $res = Db::table('v1_student')->where('student_id', $request->post('id'))->update($data);
                    // 判断数据是否修改成功
                    if ($res >= 0) {
                        // 事务提交
                        Db::commit();
                        // 返回信息
                        return json($this->initTips(200, '修改成功'));
                    } else {
                        // 事务回滚
                        Db::rollback();
                        // 返回信息
                        return json($this->initTips(400));
                    }
                } catch (\Exception $ee) {
                    // 事务回滚
                    Db::rollback();
                    // 返回异常信息
                    return json($this->initTips(500));
                }
            }
        } catch (\Exception $e) {
            // 处理异常抛出
            return json($this->initTips());
        }
    }
}
